package net.wofly.cashier.preorder.service;

import net.wofly.cashier.order.domain.Order;
import net.wofly.cashier.preorder.domain.BookMeal;
import net.wofly.common.persistence.PageWrapper;
import net.wofly.framework.util.ReturnBean;

import java.util.List;

public interface IBookMealService {

	/**
	 * 增加或修改
	 * 
	 * @param entity
	 * @return
	 */
	public BookMeal save(BookMeal entity);

	/**
	 * 删除
	 * 
	 * @param entity
	 * @return
	 */
	public void delete(BookMeal entity);

	/**
	 * 根据主键ID删除
	 * 
	 * @param key
	 * @return
	 */
	public void delete(String key);

	/**
	 * 根据主键查询
	 * 
	 * @param key
	 * @return
	 */
	public BookMeal findOne(String key);
	
	public List<BookMeal> save(List<BookMeal> entityList) ;
	
	BookMeal findByTableIDAndStatusAndBookMealTimeBetween(String tableID, Integer status, Long startTime, Long endTime);

	/**
	 * 新增预定就餐
	 * <ul>
	 * 	<li>按日自动生成预定顺序号</li>
	 * </ul>
	 *
	 * @param bookMeal
	 */
	public ReturnBean<BookMeal> addBookMeal(BookMeal bookMeal);

	/**
	 * 取消预定就餐
	 * <ul>
	 * 	<li>未付款可以直接取消</li>
	 * 	<li>己付款的，在离就餐时间24小时内的，不可以取消</li>
	 * 	<li>己付款，离就餐时间大于24小时的，可以取消</li>
	 * 	<li>顺序号废弃</li>
	 * 	<li>验证当前订单是否为当前用户所有</li>
	 * </ul>
	 *
	 * @param bookMealID
	 * @param customer
	 */
	public ReturnBean<String> cancelBookMeal(String bookMealID, String customer);

	/**
	 * 获取所有预约就餐
	 * <ul>
	 * 	<li>mealTime=-1 获取所有时间，status=-1获取所有状态</li>
	 * 	<li>验证当前用户是否有权限查看所有预定就餐</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param employeeID
	 * @param mealTime
	 * @param status
	 */
	public ReturnBean<PageWrapper<BookMeal>> getAllBookMeal(Integer pageNum, Integer pageSize, String employeeID, Long mealTime, Integer status);

	/**
	 * 获取我的预约就餐
	 * <ul>
	 * 	<li>mealTime=-1 获取所有时间，status=-1获取所有状态</li>
	 * </ul>
	 *
	 * @param customer
	 * @param mealTime
	 * @param status
	 */
	public ReturnBean<PageWrapper<BookMeal>> getMyBookMeal(Integer pageNum, Integer pageSize, String customer, Long mealTime, Integer status);

	/**
	 * 修改就餐时间
	 * <ul>
	 * 	<li>预定提交后，只能修改联系人，电话，就餐时间</li>
	 * 	<li>验证当前客户是否当前预定所有人</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param bookMealID
	 * @param customer
	 * @param name
	 * @param mobile
	 * @param mealTime
	 */
	public ReturnBean<BookMeal> modifyMealTime(String bookMealID, String customer, String name, String mobile, Long mealTime);

	/**
	 * 付款
	 * <ul>
	 * 	<li>验证当前订单为当前用户所有</li>
	 * </ul>
	 *
	 * @param bookMealID
	 * @param customer
	 * @param num
	 */
	public ReturnBean<String> payBookMeal(String bookMealID, String customer, Double num);

	/**
	 * 就餐
	 * <ul>
	 * 	<li>修改预定就餐状态</li>
	 * 	<li>自动生成一条新订单</li>
	 * 	<li>验证当前用户是否有权限操作</li>
	 * </ul>
	 *
	 * @param bookMealID
	 * @param employeeID
	 */
	public ReturnBean<Order> repast(String bookMealID, String employeeID);

	/**
	 * 取消预定就餐确认
	 * <ul>
	 * 	<li>确认后，将己支付费用退回到原支付帐户</li>
	 * 	<li>判断当前用户是否有确认权限</li>
	 * </ul>
	 *
	 * @param bookMealID
	 * @param employeeID
	 */
	public ReturnBean<BookMeal> verifyCancelBookMeal(String bookMealID, String employeeID);

}
